//Copyright 2012 Trevin Liberty
//GNU GPL v3
//Author: Trevin Liberty

#ifndef ARCHER_OWNED_STATES_H
#define ARCHER_OWNED_STATES_H

#include "State.h"

class Archer;

class WaitA : public State<Archer>
{
private:
  
  WaitA(){}
  
  //copy ctor and assignment should be private
  WaitA(const WaitA&);
  WaitA& operator=(const WaitA&);
 
public:

  static WaitA* Instance();
  
public:
  
  virtual void Enter(Archer* archer);

  virtual void Execute(Archer* archer);

  virtual void Exit(Archer* archer);

};

class MoveA : public State<Archer>
{
private:
  
  MoveA(){}
  
  //copy ctor and assignment should be private
  MoveA(const MoveA&);
  MoveA& operator=(const MoveA&);
 
public:

  static MoveA* Instance();
  
public:
  
  virtual void Enter(Archer* archer);

  virtual void Execute(Archer* archer);

  virtual void Exit(Archer* archer);

};

class AttackA : public State<Archer>
{
private:
  
  AttackA(){}
  
  //copy ctor and assignment should be private
  AttackA(const AttackA&);
  AttackA& operator=(const AttackA&);
 
public:

  static AttackA* Instance();
  
public:
  
  virtual void Enter(Archer* archer);

  virtual void Execute(Archer* archer);

  virtual void Exit(Archer* archer);

};


#endif